<?php

namespace JsonLowCode\Form\Fields;

use JsonLowCode\UI\DynamicTags;
use JsonLowCode\Form\Abstract\FieldAbstract;
use JsonLowCode\Form\Traits\HasDisabled;
use JsonLowCode\Form\Traits\HasSize;

/**
 * @property DynamicTags $element
 */
class DynamicTagsField extends FieldAbstract
{

    use HasDisabled, HasSize;

    protected function booting(): void
    {
        $this->element = new DynamicTags();
    }

    protected function booted(): void
    {
        $this->defaultValue([]);
    }

    /**
     * 最大值
     * @param float|int|string $step
     * @param bool $isJSExpression
     * @return $this
     */
    public function max(float|int|string $step = 1, bool $isJSExpression = false): static
    {
        $this->element->max($step, $isJSExpression);
        return $this;
    }

    /**
     * 自定义输入框的样式
     * @param string|array $itemStyle
     * @param bool $isJSExpression 是否js表达式
     * @return $this
     */
    public function inputStyle(string|array $itemStyle, bool $isJSExpression = false): static
    {
        $this->element->inputStyle($itemStyle, $isJSExpression);
        return $this;
    }

    /**
     * 自定义标签的样式
     * @param string|array $itemStyle
     * @param bool $isJSExpression 是否js表达式
     * @return $this
     */
    public function tagStyle(string|array $itemStyle, bool $isJSExpression = false): static
    {
        $this->element->tagStyle($itemStyle, $isJSExpression);
        return $this;
    }


    /**
     * 标签类型
     * @param string $value 'primary' | 'info' | 'success' | 'warning' | 'error'
     * @param bool $isJSExpression 是否js表达式
     * @return $this
     */
    public function type(string $value = 'primary' | 'info' | 'success' | 'warning' | 'error', bool $isJSExpression = false): static
    {
        $this->element->type($value, $isJSExpression);
        return $this;
    }


    /**
     * 是否可关闭
     * @param string|bool $bool
     * @param bool $isJSExpression 是否js表达式
     * @return $this
     */
    public function closable(string|bool $bool = true, bool $isJSExpression = false): static
    {
        $this->element->closable($bool, $isJSExpression);
        return $this;
    }

    /**
     * 点击添加按钮时的回调，如果设定则返回值会被用作新添加的初始值。其中 index 是创建内容将要被放置到的位置对应的数组索引，从 1（第二项）开始计算
     * @param string $value 函数 (index:number) => void
     * @param bool $isJSExpression 是否js表达式
     * @return $this
     */
    public function onCreate(string $value = "(index)=>{ }", bool $isJSExpression = false): static
    {
        $this->element->onCreate($value, $isJSExpression);
        return $this;
    }


}
